module bag {
    export interface IBagInternal {
        /**
         * 移除道具
         * 注意：拿到外面要重新新建
         * @param pos 背包格子的位置
         * @param count 移除的数量
         */
        removePropByCount(pos: number, count: number): { prop: IBagPropData, count: number };

        /**
         * 移除该位置的所有道具
         * @param pos 位置索引
         */
        removeAllProp(pos: number): { prop: IBagPropData, count: number };

        /**
         * 根据条件搜索是否存在
         * @param conditions 
         */
        exist(conditions: { id: number, count: number }[]): boolean;

        isFill(): boolean;
        getEmptyIndex(): number;

        isPileFill(propId: number): boolean;
        getEmptyPileIndex(propId: number): number;

        /**
         * 重置预选
         */
        resetPrimary();

        setCapacity(capacity: number): void;
        setOccupy(occupy: boolean): void;
        setPile(pile: boolean): void;
    }

    export interface IBagPublic {
        /**
         * 添加道具
         * @param items 道具项
         */
        addProp(items: { prop: IBagPropData, count: number }[]): { pos: number, prop: { total: number } }[];
        /**
         * 排序
         * @param sortType 排序方式
         */
        sort(sortType: number): void;

        /**
         * 获取背包列表
         * @param pageIndex 页码
         * @param pageSize 每页数量
         * @param type 获取的类型
         */
        list(pageIndex: number, pageSize: number, type: number): BagUnitData[];

        /**
         * 预选中,返回选中的格子
         * @param pos 格子索引
         */
        primary(pos: number): { success: boolean, unitData: BagUnitData };

        /**
         * 取消预选中
         * @param pos 格子索引
         */
        cancelPrimary(pos: number);

        /**
         * 获取预选中的道具列表
         */
        getPrimaryList(): BagUnitData[];

        /**
         * 锁定预选中
         * @param pos 格子索引
         */
        lockPrimary(pos: number): boolean;

        /**
         * 取消锁定选中
         * @param pos 格子索引
         */
        unlockPrimary(pos: number): boolean;
    }
}